package cuatroenlinea.com.correosocial;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

import org.kobjects.util.Strings;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;

public class LoginActivity extends ActionBarActivity {

    public void RecordarmeOnClick(View view)
    {
        CheckBox checkBox = (CheckBox) this.findViewById(R.id.checkBoxRecordarme);

        if (!checkBox.isChecked())
            GuardarDatosUsuario("", "", false);
    }

    @Override
    protected void onStart() {
        super.onStart();

        EditText editTextUsuario = (EditText) this.findViewById(R.id.editTextUsuario);
        EditText editTextContrasenia = (EditText) this.findViewById(R.id.editTextContrasenia);
        CheckBox checkBoxRecordarme = (CheckBox) this.findViewById(R.id.checkBoxRecordarme);

        editTextUsuario.setText(LeerDatosDeUsuarioNombre());
        editTextContrasenia.setText(LeerDatosDeUsuarioContrasenia());
        checkBoxRecordarme.setChecked(LeerDatosRecordarme());
    }

    private String LeerDatosDeUsuarioNombre()
    {
        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

        return sharedPref.getString("settingNombreDeUsuario", "");
    }

    private String LeerDatosDeUsuarioContrasenia()
    {
        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

        return sharedPref.getString("settingContrasenia","");
    }

    private Boolean LeerDatosRecordarme()
    {
        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

        return sharedPref.getBoolean("settingRecordarme", false);
    }

    private void GuardarDatosUsuario(String nombreDeUsuario, String contrasenia, Boolean recordarme)
    {
        SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("settingNombreDeUsuario", nombreDeUsuario.trim());
        editor.putString("settingContrasenia", contrasenia);
        editor.putBoolean("settingRecordarme", recordarme);
        editor.commit();
    }

    public void LoginOnClick(View view)
    {
        final EditText editTextUsuario = (EditText) this.findViewById(R.id.editTextUsuario);
        final EditText editTextContrasenia = (EditText) this.findViewById(R.id.editTextContrasenia);
        final TextView textViewMensaje = (TextView) this.findViewById(R.id.textViewMensaje);
        final CheckBox checkBoxRecordarme = (CheckBox) this.findViewById(R.id.checkBoxRecordarme);

        final Activity thisActity = this;

        /* defino un thread para hacer el login */
        Thread t = new Thread()
        {
            MensajeDeResultado resultado;

            String nombreDeUsuario;
            String contrasenia;

            @Override
            public void run() {

                String NAMESPACE = "http://correosocial.com/";
                String URL = "http://webservice.correosocial.com.ar/correosocialwebservice.svc";
                String METHOD_NAME = "Login";
                String SOAP_ACTION = "http://correosocial.com/ICorreoSocialWebService/Login";

                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

                nombreDeUsuario = editTextUsuario.getText().toString().trim();
                contrasenia = editTextContrasenia.getText().toString();

                request.addProperty("nombreDeUsuario", nombreDeUsuario);
                request.addProperty("contrasenia", contrasenia);

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
                envelope.dotNet = true;

                envelope.setOutputSoapObject(request);

                HttpTransportSE transporte = new HttpTransportSE(URL);

                try {

                    transporte.call(SOAP_ACTION, envelope);

                    SoapPrimitive respuesta = (SoapPrimitive) envelope.getResponse();

                    resultado = new MensajeDeResultado(respuesta);

                }
                /* luego puede que use solo una excepción genérica */
                catch (Exception ex)
                {
                    resultado = new MensajeDeResultado(ex, "Error al conectar.");
                }

                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        if (resultado.EsError())
                        {
                            textViewMensaje.setText(resultado.GetMensaje());
                            return;
                        }

                        if (checkBoxRecordarme.isChecked())
                            GuardarDatosUsuario(nombreDeUsuario, contrasenia, true);

                        Intent intent = new Intent(thisActity, LocationActivity.class);

                        // paso datos a la otra ventana
                        intent.putExtra("nombreDeUsuario", nombreDeUsuario);
                        intent.putExtra("contrasenia", contrasenia);

                        // que no quede "conectando"
                        textViewMensaje.setText("");

                        thisActity.startActivity(intent);

                    }
                });

            }
        };

        textViewMensaje.setText("Conectando...");

        /* intento hacer el login */
        t.start();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_login);

        if (savedInstanceState == null)
        {
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.login, menu);
        return false;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_login, container, false);
            return rootView;
        }
    }
}
